# -*- coding: utf-8 -*-
"""
Created on Sun Aug 13 16:26:47 2023

@author: skunk69
"""

import json

chinese_name = u'大学生强迫症状问卷'
english_name = 'Obsessive Compulsive Symptom Inventory of Undergaduate'
abbreviation = 'OCSI-U'
category = u'精神病学临床量表'

outline = u"""强迫症状是指以强迫为主的显著而持久的思想、冲动、意向和行为症状。当强迫症状严重到引起强烈的焦虑不安并且（或者）显著干扰其正常学习和生活时，就形成了强迫症。
《大学生强迫症状问卷》是由齐晓栋、吴明霞等于2005年编制。"""

instruction = u"""下面的句子描述的是生活中每个人都可能产生的想法和行为，这些想法和行为可能给您带来不同程度的烦扰，我们感兴趣的是它们烦扰您的程度大小。请按照您的实际情况回答，答案无对错之分。
如果句中描述的想法和行为对您最近一个月以内的生活学习的干扰程度“有一点”，则选择“有一点”，以此类推。"""

with open('OCSI-U.txt','r',encoding='utf-8') as f:
    lines = f.readlines()
    f.close()

items = {}
for line in lines:
    key,value = line.strip().split('.',maxsplit=1)
    items[key.strip()] = value.strip()

reverse_items = []
scales = [u'一般强迫思维',u'完美化强迫信念',u'性强迫观念',u'强迫行为习惯']
scales_items = [
    [1,2,5,15,17,18],# 一般强迫思维
    [4,8,13,16],# 完美化强迫信念
    [3,6,10],# 性强迫观念
    [7,9,11,12,14],# 强迫行为习惯
    ]

# check scales_items
print(f'scale length={[len(l) for l in scales_items]}')

check = []
for l in scales_items:
    check = check+l
print(f'len(check)={len(check)}')

# complementary set
check_set = {i for i in sorted(check)}^{i for i in range(1,19)}
print(f'complementary set= {check_set}')

factors = []
factors_scales = []
rating = [u'一点都不',u'有一点',u'较大',u'大',u'非常大']
score_rules = list(range(1,6))

contents = {
    'instruction':instruction,
    'items':items,
    'reverse_items':reverse_items,
    'scales':scales,
    'scales_items':scales_items,
    'factors':factors,
    'factors_scales':factors_scales,
    'rating':rating,
    'score_rules':score_rules       
    }

implementation = u"""《大学生强迫症状问卷》属于一个自评量表。"""

reliability = u"""初始样本为国内数所高校的部分新生。正式问卷的4个因子的内部一致性信度分别为：一般强迫思维0.7980，完美化强迫信念0.6588，性强迫观念0.7492，强迫行为习惯0.7781，总分0.8541。本问卷的分半信度为0.8255。"""
validity = u"""在结构效度方面，该问卷的18个条目与其所属因子的相关分别为：一般性强迫思维0.647~0.732，完美化强迫信念0.644~0.745，性强迫观念0.76~0.858，强迫行为习惯0.677~0.794。每个条目与总分的相关分布为0.382~0.662。问卷总分与各因子的相关为0.614~0.858。各因子之间的相关处于中等偏低水平。"""
measurements = {'reliability':reliability,'validity':validity}

interpretation = u"""所有18个条目得分之和即为该量表的总分，反映了被测者强迫症状的总体情况。得分越高表示症状越严重。"""

applications = u"""无常模。已经应用于我国高校大学新生。"""

this_scale = {
    'chinese_name':chinese_name,
    'english_name':english_name,
    'abbreviation':abbreviation,
    'category':category,
    'outline':outline,
    'contents':contents,
    'implementation':implementation,
    'measurements':measurements,
    'interpretation':interpretation,
    'applications':applications    
    }

with open(abbreviation+'.json','w+',encoding='utf-8') as f:
    json.dump(this_scale,f,indent=2,ensure_ascii=False)